跳到主要内容

Linux screen 工具

Shell 是什么

什么是 shell? shell 是用来解析命令的,它接受用户命令,然后调用相应的程序执行 shell 相当于一个翻译,翻译命令,让机器听懂

为什么要多个 shell? 每种 shell 都有不同的特点,按需求选择

主要分以下三种:

  • shell:/bin/bash
  • shell:/user/sbin/nologin 不可登陆的
  • shell:/bin/sh

系统创建的用户(最开始创建虚拟机时创建的那个也算是系统创建的)默认是第一种 自己创建的用户默认使用第三个,不支持上下方向键

查看当前支持的所有的 shell

cat /etc/shells

临时切换 Shell

bash

永久修改当前用户的 Shell

# 可以直接输入:
bash # 临时时切换成 /bin/bash

# 使用 bash 模式输入命令:
chsh

# 再 在Login Shell [*] 后输入
/bin/bash

screen 和 nohup 区别?

如果想在关闭 ssh 连接后刚才启动的程序继续运行怎么办,可以使用 nohup。但是如果要求第二天来的时候。一开 ssh,还能查看到昨天运行的程序的状态,然后继续工作,这时 nohup 是不行了,需要使用 screen 来达到这个目的。

虽然 nohup 很容易使用,但还是比较“简陋”的,对于简单的命令能够应付过来,对于复杂的需要人机交互的任务就麻烦了

这时使用 screen 可以 ctrl + ad 将进程挂到后台

这个 Screen 的本质原理就是,通过 Screen 这个程序代管用户的 Shell

安装 Screen

在 Ubuntu 里安装软件

apt-get install screen

在 CentOS 里安装软件

yum install screen  #CentOS

然后进入 Screen 里面才能使用

# 输入 screen
screen

查看帮助:Ctrl + a 然后 按 ?

会话操作

如果要退出 SSH

ctrl + ad 把这个线程挂载到后台 ⭐

如果是直接退则是 ctrl + z(挂起)

Ctrl + a 然后按 c 创建一个新的运行 shell 的窗口并切换到该窗口 ⭐

常用命令

# 新建一个窗口或者开启 Screen 进程(但是是无名的)
screen

# 新建一个名叫 yourname 的窗口,并马上进入(同上,只是可以自定义名字)
screen -S yourname # 可以使用快捷键 ctrl + a c

# 列出当前所有的session
screen -ls

# 重新进入之前已经创建的会话
screen -r yourname

# 如果想要删除这个 screen 两种方式:
# 1、Ctrl + a 然后按 Shift + k 杀死当前 Shell

# 2、激活 screen,并利用 exit 退出并 kill 掉session。
screen -r session_name
exit

#3、
screen -ls # 取得 ID 后再删除
screen -X -S 122128 exit # 或者 quit

# 查看 screen 版本号
screen -v

screen -r yourname #-> 回到yourname这个session
screen -d yourname #-> 远程detach某个session
screen -d -r yourname #-> 结束当前session并回到yourname这个session
screen -D -r yourname #-> 结束当前的session,并logout,再链接yourname这个session

# 关闭当前会话(所以先使用 screen -r 连接到会话,再使用exit关闭该会话)
# 或者使用 kill 会话 id 就可以关闭会话了
exit

常见的问题

Linux Screen 状态为 Attached 连不上无法恢复的解决方法

screen -D  -r <session-id>

也就是在 -r 前面加个 -D,先踢掉之前登录的用户,然后我们就可以正常登录了。

窗口操作

Screen 不像其它的工具,它主要监听的是快捷键,具体操作如下:

Ctrl + a 然后按 c 创建一个新的运行 shell 的窗口并切换到该窗口 ⭐

拆分窗口

Ctrl + a 然后 Shift + s 水平拆分Ctrl + a 然后 | 垂直拆分Ctrl + a 然后 Tab 切换分屏Ctrl + a 然后 shift + x 关闭当前分屏

如果没有可操作界面则需要在这个窗口上使用 Ctrl + a n or p 切换到其他窗口,实际上就是默认切割成的是一个空窗口,需要把其他窗口挂载上来

Ctrl + a,然后 输入 `:resize 25` 调整窗口大小,这里 `:resize` 是命令

切换窗口

ctrl + a ctrl + a 切换最近使用的窗口ctrl + a 然后按 shift + " 显示所有窗口列表

Ctrl + a 然后按 0-9 切换到第 0..9 个 window (不是连着按,下同)Ctrl + a 然后按 n or p 切换上下窗口

移除窗口

Ctrl + a 然后按 Shift + k 杀死当前 ShellCtrl+a 然后按 Shift + x 关闭当前窗口(不杀死 Shell),别按错按成 ctrl + xCtrl + a 然后按 shift + q 关闭除了当前窗口外的所有窗口

或直接 exit

Reference

How To Use Linux Screen linux后台运行之screen和nohup 为什么 Linux 终端关闭时为什么会导致在其上启动的进程退出?